MacOS環境にてvirtualbox+dockerでlocalstackを設定してみた
はじめに
AWSを利用したロジックのテストにlocalstackを使おうと試していましたが、MacOS上での設定がドキュメント通りにはうまくいかず、port mapping等でなかなか進まない状態でした。
結構な時間振り回されたものの無事設定が完了したので、実際の手順を備忘録含めて残すことにしました。
localstackのリポジトリについて
以下の2つのリポジトリの存在を確認していますが、推奨されるのは後者です。
- atlassian/localstack
- localstack/localstack
atlassian/localstackのREADMEにも
This repository is no longer actively maintained.
とあります。アップデートに追従するために大事なことです。
localstack/localstackのセットアップ
Dockerを使うかどうかで変わります。使わない場合にはpypiのライブラリの導入となります。その際に問題点として考えられるのは、CICDを外部サービスに依存している場合に実行毎にlocalstackのインストールも実施した結果、大幅に時間が延びる可能性です。
今回はDockerを使うケースにて行います。既にDockerをセットアップ済みの場合はDockerComposeを実行まで飛ばしても構いません。
HomeBrewでの依存ライブラリインストール
brew update brew cask install virtualbox docker-toolbox
docker関連のライブラリはdocker-toolboxでインストールされます。
VirtualBox上にマシンを作成
docker-machine create --driver virtualbox default
DockerComposeを実行
以下の内容でdocker-compose.yml
を作成します。記事執筆時点でのlocalstack/localstackのdocker-compose.ymlの中身をそのまま持ってきています。
version: '2.1' services: localstack: container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}" image: localstack/localstack ports: - "4566-4599:4566-4599" - "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}" environment: - SERVICES=${SERVICES- } - DEBUG=${DEBUG- } - DATA_DIR=${DATA_DIR- } - PORT_WEB_UI=${PORT_WEB_UI- } - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR- } - KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- } - DOCKER_HOST=unix:///var/run/docker.sock - HOST_TMP_FOLDER=${TMPDIR} volumes: - "${TMPDIR:-/tmp/localstack}:/tmp/localstack" - "/var/run/docker.sock:/var/run/docker.sock"
docker-compose.ymlのあるフォルダ内にて実行します。
% TMPDIR=/private$TMPDIR \ DATA_DIR=/tmp/localstack/data \ SERVICES=apigateway,kinesis,dynamodb,dynamodbstreams,elasticsearch,s3,\ lambda,sns,sqs,redshift,es,ses,route53,cloudformation,cloudwatch,\ ssm,secretsmanager,stepfunctions,logs,sts,iam,ec2 \ docker-compose up -d
ゲストOSのlocalstackにアクセス
手順としてlocalhost
や0.0.0.0
へのアクセスにしているケースもありますが、VirtualBoxを経由しているためdocker-machine
にてvirtualboxのIPを確認する必要があります。
% docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default - virtualbox Running tcp://192.168.99.100:2376 v19.03.5
今回はhttp://192.168.99.100:8080/
にて、専用のWebUIにアクセスが可能となります。
また、localstackを通じたawsのテストについては、0.11.0よりportが4566に統一されています。これについても、今回はhttp://192.168.99.100:4566
となります。
% curl http://192.168.99.100:4566 {"status": "running"}
あとがき
localstackのセットアップを行う中でDocker内へのアクセスが全く上手く行かない状態が続き、
- ポートマッピングがうまく行っているか
- Docker内では正常にアクセスができるのか
- ポート指定はあっているのか
等只管確認をしていましたが、中々うまくいきませんでした。その中で以下の記事にたどり着き、VirtualBoxの存在を忘れていたことに気が付きました。
Macでdockerを使う際にlocalhostでcontainerに繋げない問題の調査 - Qiita
Docker環境構築でうまく行かない場合の参考になれば幸いです。